home *** CD-ROM | disk | FTP | other *** search
/ Gigantic Games 2 / Gigantic Games 2.iso / pc / _w_ / wanderer / src / m.c < prev    next >
C/C++ Source or Header  |  1994-12-23  |  4KB  |  209 lines

  1. #include "wand_head.h"
  2.  
  3. extern char *playscreen();
  4.  
  5. extern int rscreen();
  6.  
  7. extern int savescore();
  8.  
  9. int debug_disp = 0;
  10. int no_passwords = 0;
  11. int maxscreens;
  12. char screen[NOOFROWS][ROWLEN+1];
  13. int edit_mode = 0;
  14. int saved_game = 0;
  15. char *edit_screen;
  16.  
  17. main(argc,argv)
  18. int  argc;
  19. char *argv[];
  20. {
  21. char (*frow)[ROWLEN+1] = screen;
  22. int num,score,bell = 0,maxmoves,fp,x,y;
  23. char howdead[25],buffer[100],
  24.      *name,*keys,*dead,ch;
  25. char *malloc();
  26.  
  27. if(argc == 2)
  28.     {
  29.     if(!strcmp(argv[1], "-e"))
  30.     {
  31.     edit_mode = 1;
  32.     edit_screen = NULL;
  33.     }
  34.     else if(!strcmp(argv[1], "-m"))
  35.     {
  36.     initscr();
  37.     erase_scores();
  38.     endwin();
  39.     exit(0);
  40.     }
  41.     else if(!strcmp(argv[1], "-c"))
  42.     {
  43.     /* show credits */
  44.     initscr();
  45.     credits();
  46.     endwin();
  47.     exit(0);
  48.         }
  49.     else if(!strcmp(argv[1], "-s"))
  50.     {
  51.     initscr();
  52.         savescore("-",0,0,"-");
  53.     addstr("press any key");
  54.     getch();
  55.     endwin();
  56.         exit(0);
  57.     }
  58.     else if(!strcmp(argv[1], "-f"))
  59.         {
  60.     debug_disp = 1;
  61.     }
  62.     else
  63.     {
  64.     fprintf(stderr,"Usage: %s [ -e [ file ] | -m | -c | -s | -f ]\n",argv[0]);
  65.     exit(1);
  66.         }
  67.     }
  68. if(argc > 2)
  69.     {
  70.     if(!strcmp(argv[1],"-e"))
  71.     {
  72.     edit_mode = 1;
  73.     edit_screen = argv[2];
  74.     }
  75.     else
  76.     {
  77.         fprintf(stderr,"Usage: %s [ -e [ file ] | -m | -c | -s | -f ]\n",argv[0]);
  78.         exit(1);
  79.     }
  80.     }
  81.  
  82. /* check for passwords - if file no_pws is in screen dir no pws! */
  83. sprintf(buffer,"%s/no_pws",SCREENPATH);
  84. if((fp = open(buffer,O_RDONLY)) != -1) {
  85.     close(fp);
  86.     no_passwords = 1;
  87. }
  88.  
  89. /* count available screens */
  90. for(maxscreens = 0;;maxscreens++) {
  91.     sprintf(buffer,"%s/screen.%d",SCREENPATH,(maxscreens+1));
  92.     if((fp = open(buffer, O_RDONLY)) == -1 )
  93.     break;
  94.     close(fp);
  95. }
  96.  
  97. initscr();
  98.  
  99. if((name = (char *)getenv("NEWNAME")) == NULL)
  100.     if((name = (char *)getenv("NAME")) == NULL)
  101.         if((name = (char *)getenv("FULLNAME")) == NULL)
  102.             if((name = (char *)getenv("USER")) == NULL)
  103.         if((name = (char *)getenv("LOGNAME")) == NULL)
  104. #ifdef    ASKNAME    /* M001 */
  105.         {
  106.             name = malloc(80);
  107.             if (name == NULL) {
  108.             addstr("malloc error\n");
  109.             refresh();
  110.             endwin();
  111.             exit(1);
  112.             }
  113.  
  114.             draw_box(3,10,40,5);
  115.             move(5,12);
  116.             setcolor(YELLOW, DK_GREEN);
  117.             addstr("What is your name? ");
  118.             refresh();
  119.             echo(); CBOFF;
  120.             gets(name);
  121.             noecho(); CBON;
  122.             setcolor(TEXT_COLOR, BACK_COLOR);
  123.             if (name[0] == '\0')
  124.                 name = "noname";
  125.         }
  126. #else
  127.                 name = "noname";
  128. #endif
  129.  
  130. if((keys = (char *)getenv("NEWKEYS")) == NULL)
  131.     {
  132.     keys = "kjhl";
  133.     }
  134.  
  135. /* MAIN PROGRAM HERE */
  136.  
  137. CBON; noecho();
  138.  
  139. while (1)
  140. {
  141.   num = 1;
  142.   score = 0;
  143.   maxmoves = 0;
  144.   clear();
  145.   if(!edit_mode) {
  146.     for (;;) {
  147.         if (rscreen(num,&maxmoves)) {
  148.         strcpy(howdead,"a non-existant screen");
  149.         break;
  150.         };
  151.         dead = playscreen(&num,&score,&bell,maxmoves,keys);
  152.         if ((dead != NULL) && (*dead == '~')) {
  153.         num = (int)(dead[1]) - 1;
  154.         dead = NULL;
  155.         }
  156.         if (dead != NULL)
  157.         {
  158.         strcpy(howdead,dead);
  159.             break;
  160.             }
  161.         num++;
  162.         }
  163.  
  164.     playSound(DEATH_SOUND);
  165.     clear();
  166.     setcolor(RED, BLACK);
  167.     sprintf(buffer,"%s killed by %s with a score of %d on level %d.\n",name,howdead,score,num);
  168.     addstr(buffer);
  169.     }
  170.   else
  171.     {
  172.     if(rscreen(num,&maxmoves))
  173.     {
  174.     for(x=0;x<ROWLEN;x++)
  175.         for(y=0;y<NOOFROWS;y++)
  176.         screen[y][x] =  ' ';
  177.     }
  178.     editscreen(num,&score,&bell,maxmoves,keys);
  179.     }
  180.   /* END OF MAIN PROGRAM */
  181.  
  182.   /* SAVE ROUTINES FOR SCORES */
  183.  
  184.   if(!edit_mode)
  185.     {
  186.     setcolor(WHITE, BLACK);
  187.     if((savescore(howdead,score,num,name) == 0)&&(score != 0))
  188.         addstr("\nWARNING: score not saved!\n\n");
  189.     }
  190.   setcolor(RED, BLACK);
  191.   addstr("WANDERER (C)1988 S. Shipway.");
  192. #ifdef AMIGA
  193.   addstr("  AMIGA version by Alan Bland.");
  194. #endif
  195.  
  196.   /* ask if they want to play again - save loading time on floppy-based systems */
  197.   setcolor(LT_GREEN, BLACK);
  198.   addstr("\nDo you want to try again? ");
  199.   refresh();
  200.   while ((ch = getch()) != 'y' && ch != 'n') {}
  201.   if (ch == 'n') break;
  202. }
  203.  
  204. echo();
  205. CBOFF;
  206. endwin();
  207. exit(0);
  208. }
  209.